package br.com.saeng2D.analiseLxSi.al;

import br.com.saeng2D.analiseLxSi.al.estado.EAbreParentese;
import br.com.saeng2D.analiseLxSi.al.estado.EFechaParentese;
import br.com.saeng2D.analiseLxSi.al.estado.EIGual;
import br.com.saeng2D.analiseLxSi.al.estado.ENumero;
import br.com.saeng2D.analiseLxSi.al.estado.EOperador;
import br.com.saeng2D.analiseLxSi.al.estado.EVariavel;

public class EInicial extends Estado {
	public EInicial(AnalisadorLexico al) {
		super(al, "inicial");
	}

	public boolean processar(char c) throws Exception {
		if (c <= ' ') {
			// Consumir espacos em branco
		} else if (c >= '0' && c <= '9') {

			al.indiceReconhecido = al.indice;
			al.cadeiaReconhecida.append(c);
			al.estado = new ENumero(al);

		} else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {

			al.indiceReconhecido = al.indice;
			al.cadeiaReconhecida.append(c);
			al.estado = new EVariavel(al);

		} else if (c == '(') {

			al.indiceReconhecido = al.indice;
			al.cadeiaReconhecida.append(c);
			al.estado = new EAbreParentese(al);

		} else if (c == ')') {

			al.indiceReconhecido = al.indice;
			al.cadeiaReconhecida.append(c);
			al.estado = new EFechaParentese(al);

		} else if (c == '+' || c == '-' || c == '*' || c == '/') {

			al.indiceReconhecido = al.indice;
			al.cadeiaReconhecida.append(c);
			al.estado = new EOperador(al);

		} else if (c == '=') {

			al.indiceReconhecido = al.indice;
			al.cadeiaReconhecida.append(c);
			al.estado = new EIGual(al);

		} else {
			 throw new Exception("Caracter nao reconhecido -> " + c);
		}
		return false;
	}

	public boolean ehValido() {
		return true;
	}
}